package com.patterns.templatemethod;

/**
 * 银行业务模板类，定义银行业务的流程模板方法，把具体要办理的业务实现放到子类中处理(钩子方法)
 * 排队取号 - 办理具体业务 - 评分
 * @author huangke
 *
 */
public abstract class BankBusinessTemplate {
	public void takeNumber(){
		System.out.println("排队取号");
	}
	
	public abstract void business();//具体要办理的业务，钩子方法
	
	public void evaluate(){
		System.out.println("服务评分");
	}
	
	/**
	 * 模板方法
	 * 定义模板中的流程
	 * final方法，子类不能重写，具体流程由模版预定义
	 */
	public final void process(){
		this.takeNumber();
		this.business();
		this.evaluate();
	}
}
